package com.qtrue.thread;

/*
	多线程的创建：
		方式二：实现Runnable接口
			1. 创建一个实现了Runnable接口的类；
			2. 实现类去重写Runnable接口中的run()方法 -> 线程中需要完成的操作声明在run()方法中；
			3. 创建实现类的对象；
			4. 将此对象作为参数传递到Thread类的构造器中（创建Thread类的对象）；
			5. 通过Thread类的对象调用start()方法。

    比较创建线程的两种方式：
        开发中：优先选择实现Runnable接口的方式
            原因：
                1. 实现的方式没有类的单继承性的局限性；
                2. 实现的方式更适合来处理多个线程有共享数据的情况。

        两种创建方式的联系：public class Thread implements Runnable （Thread类其实也是一个Runnable接口的实现类）
        相同点：两种方式都需要重写run()方法，将创建的线程中要执行的逻辑声明在run()方法中。

*/
public class ThreadCreate02_Runnable {
    public static void main(String[] args) {
        // 3. 创建实现类的对象
        MyThread02 m2 = new MyThread02();

        // 4. 将此对象作为参数传递到Thread类的构造器中（创建Thread类的对象）
        Thread thread01 = new Thread(m2);

        thread01.setName("线程一"); // 设置线程名称
        // 5. 通过Thread类的对象调用start()方法：1. 启动线程 2. 调用当前线程的run() -> 调用了Runnable类型的target的run()
        thread01.start();

        // 再启动一个线程，遍历100以内的偶数
        Thread thread02 = new Thread(m2);
        thread02.setName("线程二");
        thread02.start();
    }
}

// 1. 创建一个实现了Runnable接口的类
class MyThread02 implements Runnable {
    // 2. 实现类去重写Runnable接口中的run()方法 -> 线程中需要完成的操作声明在run()方法中；
    @Override
    public void run() {
        for(int i=1;i<100;i++) { // 求出100以内的奇数
            if(i%2 != 0) {
                System.out.println(Thread.currentThread().getName() + "：" + i);
            }
        }
    }
}
